草庐IT

c++ - unique_ptr VS auto_ptr

全部标签

c++ - 用于渲染不同对象的 VAO 和 VBO

我编写了这个“模型”类来加载.obj文件并在VBO中为它们分配数据。它的代码是这样的:(注意它如何不使用VAO)classModel{...}voidModel::LoadOBJ(constchar*file){//loadvertices,normals,UVs,andputthemallin_vec,whichisaprivatedatamemberofstd::vector...//ifan.objfileisloadedforthefirsttime,generateabufferobjectandbinditif(glIsBuffer(_vbo)==GL_FALSE){glG

c++ - 使用 C API 的有序 lua 表循环

考虑以下lua表:foo={bar1={a=1,b=2,c="hello"},bar2={a=5,b=2,c="bbq"},bar3={a=76,b=13,c="pwnd"}}我正在尝试使用luaCAPI迭代此表以检索键名称bar1、bar2和bar3。我使用lua_next(L,-2)函数按照许多人的建议进行迭代,但问题是它以随机顺序返回元素。每次运行时顺序都会发生变化。我使用以下代码:for(lua_pushnil(L);lua_next(L,-2)!=0;lua_pop(L,1)){printf("%s\n",lua_tostring(L,-2));}大多数时候,输出是无序的,比

c++ - WSARecv() 和多个缓冲区

我想要WSARecv的精度。基本上,您似乎可以将函数与WSABUF数组一起使用。1-在重叠的I/O上下文中WITHOUT完成端口,假设我在具有48个WSABUF数组的数据报套接字上使用WSARecv(),这是否意味着我可以接收48个不同的UDP数据包(每个缓冲区1个数据包)在一次调用中(假设它们在同一时刻到达)?或者接收48个数据包的唯一方法是在事件发出信号后使用WSARecv()48次(使用重叠I/O与事件而不是完成端口,我重复一遍)。2-在WITHI/O完成端口/重叠I/O的上下文中,这是否意味着我可以替换它intn=48;for(inti=0;i用这个?WSARecv(sock,

c++ - C/C++ 中的函数调用宏

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion如果一个函数,比如foo(),在各种平台上以不同的方式被调用,使用宏是不是不好的做法?例如:#ifdefWIN32#defineffoo(a)foo(0)#else#defineffoo(a)foo(a)#endif

c++ - 为什么 std::shared_ptr 的别名构造函数不初始化 std::enabled_shared_from_this?

考虑以下代码:structFoo:std::enable_shared_from_this{};structBar{Foofoo;};intmain(){std::shared_ptrbar_p(newBar);//makeshared_ptrtomemberwithaliasingconstructorstd::shared_ptrfoo_p(bar_p,&bar_p->foo);assert(bar_p->foo.shared_from_this());//fail!throwsbad_weak_ptr}不幸的是,它没有按预期工作(至少在GCC4.8.2中)。我查看了代码,似乎别名

c++ - 对象 std::shared_ptr 是否可以通过它的 std::weak_ptr 找到?

所以我有一个std::vector>myListOfT;我有一个std::weak_ptrptrToOneT;它是从用于填充该容器的指针之一创建的(假设我将它放在回调函数中)。威尔std::find在那个容器和我的weak_ptr给我一个原始shared_ptr的迭代器(如果集合中存在这样的一个)?它是在标准的某处得到保证还是依赖于此实现? 最佳答案 通过使用std::weak_ptr::owner_before,我们可以不锁定weak_ptr。我将使用比必要的稍微冗长的解决方案并引入owner_equal,它与std::owner

c++ - 如何检查从哪里引用函数

在裸机C/C++项目中,我使用gcc-arm-embedded(目前最新的4.9-2015-q2)。出于某些原因,我必须避免使用某些函数,例如一些stdio等(不想使用重定向或半主机)。此外,我将FreeRtos与heap_4.c一起使用,例如malloc()直接重定向到pvPortMalloc()像这样:void*malloc(size_ts){returnpvPortMalloc(s);}因此,我不想在我的二进制文件中包含工具链堆管理代码的任何部分。现在,在某些情况下,我团队的开发人员意味着使用例如printf()间接引用_malloc_r()(以及更多)并且实际上很难找出它的引用

c++ - C 编译的 .so 可以与 C++ 应用程序一起使用吗?

如果我想使用LD_PRELOAD为C++应用程序(使用g++构建)动态链接共享库(.so),那么.so是从C源文件(使用gcc)还是从C++源文件(使用g++)?为什么或为什么不呢?感谢您帮助我理解这一点。 最佳答案 是的,C++可执行文件可以(静态和动态)链接到C库。这完全是故意的。C++ABI设计为向后兼容。您必须确保在您的C++程序中编写的库符号的函数声明等标记为extern"C"以表示您正在跨越语言边界.通常,图书馆自己提供的头文件会为您执行此操作。 关于c++-C编译的.so可

c++ - 支持单个位偏移的类似“memcpy”的函数?

我正在考虑解决这个问题,但它看起来是一项艰巨的任务。如果我自己拿这个,我可能会用几种不同的方式编写它并选择最好的,所以我想我会问这个问题,看看是否有一个好的图书馆已经解决了这个问题,或者是否有人有想法/建议。voidOffsetMemCpy(u8*pDest,u8*pSrc,u8srcBitOffset,sizesize){//Orsomethingalongtheselines.srcBitOffsetis0-7,sothepSrcbuffer//needstobeuptoonebytelongerthanitwouldneedtobeinmemcpy.//Maybeexplicit

c++ - c/c++ 相对包含路径与 Makefile 包含标志

在一个文件以目录树结构结构的大型项目中,在源文件中包含相对路径更好,还是只包含头文件并通过Makefile指示编译器在哪里找到它更好?有首选方法吗?示例:#include"../path/to/file.h"对比#include"file.h"gcc-I../path/to我相信第一种情况可能更具可读性,而第二种方法可以无缝移动文件... 最佳答案 第二种方法效率更高,因为您不必每次要使用此文件时都重写路径。让我们举个例子。您想构建一个包含一些有用函数的库。然后你在一个项目上工作,你需要图书馆的一些功能,而不是全部。因此,您选择将这